문단 클릭 = 시작 위치 선택 · 재생은 우하단 버튼/P (재생 중 클릭 = 점프)

6장. 자료 찾아 붙이고, 스스로 일하기 (RAG와 에이전트)

출처: 『AI 엔지니어링』(Chip Huyen 지음) | 원서: AI Engineering (O'Reilly) — 본 입문판은 PDF 원문에서 직접 풀어 썼다.

코드는 분위기만 — Python·함수 이름 같은 건 몰라도 됩니다. '비유'와 '위험'만 봐도 충분해요.


0. 이 장의 새 단어 (0장에 없는 것만 3개)

이 셋만 알면 6장은 다 읽힌다.

나머지 어려운 말(임베딩·RAG·환각 등)은 0장 용어집에 있다.


청크(chunk)

한 문장 뜻 — 긴 문서를 검색하기 좋게 잘라 놓은 한 조각.

일상비유 — 두꺼운 책을 통째로 복사하는 대신, 필요한 쪽만 뜯어 두는 것. 한 쪽이 곧 청크다.

한 줄 예 —

# 문서가 통째로 있으면 필요한 부분만 찾기 어렵다 → 미리 조각내 둔다
chunks = split("계약서 전문...", size=500)  # 500자씩 한 조각

에이전트(agent)

한 문장 뜻 — 주변을 살펴보고(읽기) 직접 행동까지(쓰기) 하는 AI. 모델에 손발을 달아 준 것.

일상비유 — 시키면 알아서 일하는 비서. 검색도 하고, 계산기도 두드리고, 메일도 보낸다. 그냥 답만 하는 챗봇과 다르다.

한 줄 예 —

# 그냥 답하는 게 아니라, 도구를 골라 행동까지 함
agent.run("이번 주 환율로 40파운드를 킬로로 바꿔줘")

도구(tool)

한 문장 뜻 — 에이전트가 부려 쓰는 외부 기능. 검색기·계산기·메일 보내기 같은 것.

일상비유 — 비서 책상 위의 연장통. 계산기, 전화기, 메모장. 연장이 많을수록 더 많은 일을 한다.

한 줄 예 —

# 모델은 수학에 약함 → 계산기 도구를 쥐여 줌
tools = [calculator, web_search, send_email]

이런 적 있죠?

AI한테 "우리 회사 환불 규정 알려줘"라고 물었다.

그런데 AI는 우리 회사를 모른다. 학습할 때 본 적이 없으니까.

그래서 그럴듯한 거짓 규정을 지어낸다(환각).

사람도 똑같다. 정보가 없으면 헛소리를 한다.

그럼 어떻게 할까? 답하기 전에 규정 문서를 찾아서 같이 던져 주면 된다.

# 답하기 전에 관련 자료를 먼저 찾아 붙임
docs = search("환불 규정")           # ① 자료 검색
model.ask("환불 규정 알려줘", docs)   # ② 자료 보고 답

이렇게 "찾아서 붙여 주는" 방식이 RAG다.

여기서 한 발 더 나가면, 검색만 하는 게 아니라 계산도 하고 메일도 보내는 비서가 된다.

그게 에이전트다.

이 장은 이 둘 이야기다.


이 장에서 딱 4가지만

  1. RAG — 답하기 전에 관련 자료를 찾아 붙여 준다. 모델이 모르는 걸 알게 만든다.
  2. 검색의 두 방식 — 단어가 똑같은 걸 찾기(빠름) vs 뜻이 비슷한 걸 찾기(똑똑함).
  3. 에이전트 — 모델에 도구(손발)를 달아 스스로 행동하게 한다.
  4. 메모리 — 방금 들은 것(단기)과 오래된 자료(장기)를 나눠서 기억한다.

학습 목표

  • RAG가 왜 필요한지 설명한다.
  • 단어 기반 검색과 의미 기반 검색을 구분한다.
  • 에이전트가 그냥 챗봇과 어떻게 다른지 설명한다.
  • 단기 메모리와 장기 메모리를 구분한다.

개념 1 — RAG: 답하기 전에 자료를 찾아 붙인다

망가지는 장면

"신제품 A300 프린터 사양을 물었더니, AI가 없는 숫자를 술술 지어냈다."

모델은 그 제품을 학습한 적이 없다. 그래서 환각이 났다.

일상비유

오픈북 시험.

머리로만 답하면 틀린다.

답안지 옆에 자료집을 펴 놓고 찾아보며 쓰면 정답률이 확 오른다.

RAG는 모델에게 자료집을 펴 주는 일이다.

비유 코드 위험
머리로만 답함(폐쇄책 시험) model.ask("A300 사양?") 모르면 지어냄(환각)
자료 펴 놓고 답함(오픈북) model.ask("A300 사양?", docs) 자료를 잘못 찾으면 헛답

한 문장 정의 — RAG는 질문마다 관련 자료를 찾아 컨텍스트에 붙여 주는 방식이며, 모델을 고치지 않고도 모르는 것을 알게 만든다.

왜 굳이? — "그냥 다 넣으면 안 되나?"

요즘 모델은 긴 글도 받는다.

그럼 자료를 전부 넣으면 되지 않나?

안 된다. 두 가지 이유다.

  1. 자료는 계속 늘어난다. 아무리 길게 받아도 언젠간 넘친다.
  2. 길게 넣을수록 모델이 엉뚱한 데를 본다. 게다가 길면 비용도 시간도 더 든다.

RAG는 꼭 필요한 자료만 골라 넣어서, 싸고 빠르고 정확하게 만든다.

한 걸음 더 ▸ (지금 몰라도 됨)

Anthropic은 "자료가 약 500쪽(20만 토큰) 미만이면 RAG 없이 그냥 다 넣어도 된다"고 했다.

즉 자료가 적으면 RAG가 굳이 필요 없다. 많아질 때 빛난다. 지금은 "많으면 골라 넣는다"만 기억하면 된다.

단계별 예시

예시 1 (완성예) — 고객 지원 챗봇.

질문 "비밀번호 어떻게 바꿔요?" → 매뉴얼에서 비밀번호 관련 쪽을 찾아 붙임 → 정확히 답.

# 질문 문장을 통째로 넣지 않고, 핵심 단어만 뽑아 검색한다 — 그래야 엉뚱한 자료가 덜 붙는다
docs = search("비밀번호 변경")
model.ask("비밀번호 어떻게 바꿔요?", docs)

예시 2 (부분완성) — 빈칸을 채워 보자.

법률 상담 봇이 판례를 지어내지 않게 하려면?

docs = search("____")          # 빈칸: 무엇을 검색할까? → 질문 속 사건명
model.ask("이 사건 판례 있어?", docs)

답: 질문에 나온 사건 키워드를 검색한다. 그래야 진짜 판례만 붙는다.

예시 3 (독립적용) — 직접 떠올려 보자.

"우리 팀 회의록에서 지난주 결정사항 알려줘"라는 질문에 RAG를 쓰면, 무엇을 search 하고 무엇을 붙여 줄까?

(힌트: 회의록 문서를 검색해 관련 청크를 붙인다.)


개념 2 — 검색의 두 방식: 단어가 같은가, 뜻이 비슷한가

망가지는 장면

"'트랜스포머 아키텍처'를 검색했더니 영화 '트랜스포머'랑 전기 변압기 문서가 나왔다."

단어만 같으면 다 끌어왔기 때문이다.

일상비유

도서관에서 책 찾기.

방법 A — 제목에 그 단어가 있는 책만 뽑기. 빠르지만 멍청하다.

방법 B — 사서에게 "이런 내용"이라 말하면 뜻이 맞는 책을 골라 줌. 똑똑하지만 느리다.

비유 코드 위험
단어 똑같은 것만(방법 A) find_word("트랜스포머") 뜻 다른 게 섞임(변압기·영화)
뜻이 비슷한 것(방법 B) find_meaning("AI 신경망 구조") 느리고 비쌈

한 문장 정의 — 단어 기반 검색은 글자 모양이 같은 걸 찾고(빠름·저렴), 의미 기반 검색은 임베딩으로 뜻이 가까운 걸 찾는다(똑똑함·비쌈).

(임베딩이 헷갈리면 0장 용어집 "임베딩" 칸을 보면 된다. 뜻을 좌표로 바꿔 가까운 걸 찾는 것이다.)

단순 규칙

처음엔 단어 기반(BM25)부터 써라. 빠르고 공짜에 가깝고, 그냥 잘 된다.

이걸 기준선으로 삼고, 부족하면 의미 기반을 얹는다.

한 걸음 더 ▸ (지금 몰라도 됨)

실제 현장은 둘을 섞는다(하이브리드 검색).

단어 기반으로 후보를 싹 긁고, 그 안에서 의미 기반으로 진짜 맞는 걸 다시 고른다(재순위화).

지금은 "단어부터, 부족하면 의미 추가"만 알면 된다.

단계별 예시

예시 1 (완성예, before/after) — 오류 코드 검색.

before: 의미 기반만 쓰니 EADDRNOTAVAIL(99) 코드가 뭉개져서 안 찾힘.

after: 단어 기반을 같이 쓰니 코드를 글자 그대로 정확히 찾음.

예시 2 (부분완성) — 어느 방식이 맞을까?

# 질문: "트랜스포머 아키텍처 설명한 자료"
# → 단어가 같아도 뜻이 다른 게 많음 → ____ 기반 검색이 유리

답: 의미 기반. 뜻으로 골라야 영화·변압기를 걸러낸다.

예시 3 (독립적용) — 직접 골라 보자.

"제품 코드 SKU-7782 들어간 주문"을 찾는다면, 단어 기반과 의미 기반 중 어느 쪽이 나을까? 왜?

(힌트: 정확한 코드 글자 매칭이 필요하다.)


개념 3 — 에이전트: 모델에 손발을 달아 준다

망가지는 장면

"AI한테 199999 나누기 292를 물었더니 틀린 답을 자신만만하게 내놨다."

모델은 글을 잇는 기계지, 계산기가 아니다(0장 척추 1).

일상비유

손 없는 천재 vs 비서.

천재가 암산은 잘하는데 손이 없어 메일도 못 보내고 계산기도 못 누른다.

여기에 연장통(도구)을 쥐여 주면, 검색하고 계산하고 메일까지 보내는 비서가 된다.

그게 에이전트다.

비유 코드 위험
그냥 답만 함(챗봇) model.ask("40파운드는 몇 kg?") 수학·최신정보에 약함
도구 쥐고 행동함(에이전트) agent.run(...) → 계산기 호출 도구 잘못 쓰면 사고

한 문장 정의 — 에이전트는 환경을 살펴보고(읽기) 도구로 행동까지(쓰기) 하는 AI이며, 어떤 환경에서 어떤 도구를 쥐느냐로 정해진다.

도구는 크게 세 종류

  • 자료 가져오기 — 검색기, 웹 브라우징, 사내 DB. 모르는 걸 알게 함.
  • 약점 메우기 — 계산기, 번역기, 코드 실행기. 모델이 못하는 걸 대신함.
  • 행동하기(쓰기) — 메일 보내기, DB 수정, 송금. 진짜 세상을 바꿈.

단순 규칙

도구가 많을수록 능력은 커진다. 하지만 너무 많으면 오히려 헷갈려 한다.

그래서 꼭 필요한 도구만 신중히 골라 쥐여 준다.

특히 "행동하기" 도구는 조심해야 한다.

한 걸음 더 ▸ (지금 몰라도 됨)

왜 조심? 인턴에게 회사 DB 삭제 권한을 안 주는 것과 같다.

믿을 수 없는 AI에 송금 권한을 주면, 한 번 헛돌 때 피해가 크다.

그래서 위험한 행동은 사람이 먼저 승인하게 만든다. 지금은 "쓰기 도구는 위험, 승인 필요"만 알면 된다.

작은 사고가 쌓이면 큰 사고

에이전트는 여러 단계를 거친다.

한 단계 정확도가 95%여도, 10단계면 약 60%, 100단계면 0.6%로 무너진다.

그래서 단계를 줄이고, 더 똑똑한 모델을 쓰고, 중간중간 스스로 점검(성찰)하게 한다.

단계별 예시

예시 1 (완성예) — 단위 변환.

"40파운드는 몇 kg?" → 모델이 직접 계산하면 틀릴 수 있음 → 계산기 도구 호출 → 정확.

# 모델이 "이건 계산기로!"라고 판단해 도구를 부름
agent.run("40파운드는 몇 kg?")  # → lbs_to_kg(40) 호출

예시 2 (부분완성) — 어떤 도구가 필요할까?

# "오늘 서울 날씨 알려줘"
# 모델 학습은 과거에 멈춤 → 오늘 날씨를 모름 → ____ 도구 필요

답: 웹 검색(자료 가져오기) 도구. 최신 정보는 검색해야 안다.

예시 3 (독립적용) — 직접 분류해 보자.

"이 고객에게 사과 메일 보내줘"는 세 도구 종류 중 무엇일까? 왜 조심해야 할까?

(힌트: 진짜로 메일이 나가는 "행동하기" 도구다.)


개념 4 — 메모리: 방금 들은 것과 오래된 것을 나눈다

망가지는 장면

"AI 비서한테 매번 내 이름과 취향을 처음부터 다시 설명해야 한다. 어제 말한 걸 다 까먹는다."

기억할 곳이 없으면 비서는 쓸모가 없다.

일상비유

사람의 기억.

  • 숨 쉬는 법은 안 잊는다 → 몸에 밴 지식.
  • 방금 만난 사람 이름은 잠깐만 기억 → 단기 기억.
  • 오래된 자료는 책·메모장에 적어 둠 → 장기 기억(필요할 때 꺼내 봄).

AI 메모리도 똑같이 셋으로 나뉜다.

비유 코드 위험
몸에 밴 지식(안 잊음) model.weights 바꾸려면 재학습 필요
방금 들은 것(잠깐) context = 최근 대화 자리가 꽉 차면 밀려남
메모장에 적어 둠(꺼내 봄) long_term = search(과거기록) 검색 잘못하면 못 꺼냄

한 문장 정의 — AI 메모리는 모델에 밴 내부 지식, 지금 대화만 담는 단기 메모리, 외부에 적어 두고 찾아 쓰는 장기 메모리로 나뉜다.

단순 규칙

지금 작업에 바로 필요한 건 단기에.

가끔 필요한 오래된 건 장기에 적어 두고 꺼내 쓴다.

장기 메모리는 사실 RAG와 똑같다. 외부에 두고 검색해 오니까.

한 걸음 더 ▸ (지금 몰라도 됨)

단기 메모리는 자리가 좁아서 꽉 차면 뭔가 버려야 한다.

가장 단순한 방법은 오래된 것부터 버리기(FIFO). 하지만 첫 메시지에 중요한 목적이 있으면 낭패다.

더 똑똑한 방법은 대화를 요약해 압축하는 것. 지금은 "단기는 좁다, 넘치면 장기로"만 알면 된다.

단계별 예시

예시 1 (완성예) — 책 추천 비서.

사용자가 전에 '삼체'를 좋아했다고 장기 메모리에 적어 둠 → 다음에 비슷한 SF를 추천.

예시 2 (부분완성) — 어디에 저장할까?

# "방금 사용자가 말한 배송 주소" → 지금 작업에만 필요 → ____ 메모리

답: 단기 메모리. 이번 주문이 끝나면 굳이 안 들고 있어도 된다.

예시 3 (독립적용) — 직접 나눠 보자.

"이 사용자는 채식주의자"라는 정보는 단기와 장기 중 어디에 둘까? 왜?

(힌트: 다음에 또 만나도 기억해야 하는 정보다.)


정리

자료를 찾아 붙이면 모델이 모르는 걸 알게 된다(RAG).

검색은 단어가 같은 걸 빠르게 찾거나, 뜻이 가까운 걸 똑똑하게 찾는다.

모델에 도구를 쥐여 주면 스스로 행동하는 에이전트가 되고, 기억할 곳을 나눠 주면 더 똑똑해진다.

세 가지 공통점: 모델 자체는 안 고치고, 입력만 잘 챙겨서 능력을 키운다.


더 해보기

  • RAG·에이전트는 변화가 가장 빠른 분야다 (검증 2026-09-05). 아래 둘만 알아 두면 된다.
  • 에이전트를 어떻게 설계하나 → Building Effective Agents (Anthropic). "단순하고 확인하기 쉬운 방식부터"가 요지다.
  • 모델에 도구를 달아 주는 방식이 회사마다 달랐는데, 이제 공통 약속 하나로 모였다 → Model Context Protocol. 이 장에서 배운 "모델에 손발을 달아 준다"를 어느 회사 모델이든 같은 방식으로 하자는 뜻이다.

다음 7장 예고 — 지금까지는 모델을 안 고치고 입력만 챙겼다. 다음엔 모델 자체를 우리 데이터로 조금 더 가르치는 법(파인튜닝)을 본다. (지금 몰라도 됩니다.)


연습문제

  1. 설명. 자료 찾아 붙이고 스스로 일하기의 핵심을 처음 듣는 사람에게 한 문장으로 설명하라.
  2. 구분. 두 개념(RAG, 에이전트)을 실제 예시 하나로 구분하라.
  3. 적용. 내 프로젝트나 학습 노트에서 이 장의 개념을 적용해 작게 개선할 지점을 하나 고르라.

부록 A. 쉬운 용어 사전

한글 용어 원문 영문명 아주 쉬운 뜻 이 장에서 나온 위치
RAG Retrieval-Augmented Generation 답변할 때 관련 자료를 찾아 붙여 모델이 근거를 보고 답하게 하는 방식. 부록 B와 본문 예시
에이전트 Agent 모델이 도구를 고르고 여러 단계를 진행하게 만든 구조. 부록 B와 본문 예시
짧은 기억 - 현재 대화 안에서만 잠시 유지되는 정보. 부록 B와 본문 예시
긴 기억 - 나중에도 다시 쓰기 위해 저장하는 정보. 부록 B와 본문 예시
## 부록 B. 헷갈리는 개념 비교표
A B 구분 포인트
RAG 에이전트 RAG는 자료를 찾아 붙이고, 에이전트는 도구 사용과 반복 판단까지 한다.
짧은 기억 긴 기억 짧은 기억은 현재 대화, 긴 기억은 나중에도 다시 쓸 정보다.

부록 C. 연습문제 풀이

  1. 설명 예시. 자료 찾아 붙이고 스스로 일하기는 거대 모델을 제품에 넣을 때 어떤 선택을 하고 어떻게 확인할지 판단하게 해 주는 장이다. 중요한 것은 용어를 외우는 것이 아니라, 이 개념이 어떤 입력·부품·결정에 영향을 주는지 말로 풀어 보는 것이다.
  2. 구분 예시. 두 개념(RAG, 에이전트)의 차이는 이렇게 잡으면 된다. RAG는 자료를 찾아 붙이고, 에이전트는 도구 사용과 반복 판단까지 한다. 실제 사례를 볼 때는 목적, 입력, 실패했을 때의 증상을 따로 적어 보면 헷갈리지 않는다.
  3. 적용 예시. 가장 작은 개선부터 고른다. 예를 들어 이름을 더 분명히 하거나, 평가 기준을 한 줄 추가하거나, 직접 알 필요 없는 내부 정보를 감추는 식으로 시작한다. 한 번에 크게 갈아엎는 것보다 작은 변경 하나를 확인하며 진행하는 쪽이 입문 단계에 맞다.
난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플   P 음성 버전 2026-08-05b